ArrayList : 배열 형태로 저장하며 index를 가지고 있다.
LinkedList : 노드 형태로 저장하며 index가 없다.
- 노드 = 주소 + 데이터
✅ 피드백:
ArrayList : 동적 배열 형태
- 검색 : O(1)
- 삽입/삭제 : O(n)
- 메모리 효율이 높음
- 읽기, index 기반 처리에 주로 사용
LinkedList : double LinkedList 형태
- 검색 : O(n)
- 삽입/삭제 : O(1) (노드 참조 확보 시에만)
- 메모리 효율이 조금 낮음(주소값 + 데이터 저장)
- Queue, Stack처럼 중간의 삽입/삭제가 자주 일어나는 경우 주로 사용
HashSet과 HashMap은 순서가 없는 반면, TreeSet과 TreeMap은 순서가 존재합니다.
✅ 피드백:
HashSet
TreeSet
HashMap
TreeMap
저장형태
value
value
key-value
key-value
내부 구조
Hash Table
Red-Black Tree
Hash Table
Red-Black Tree
정렬/순서
X
자동 정렬
X
key로 정렬
연산 성능
O(1)
O(log n)
O(1)
O(log n)
null 허용
1개 허용
X
key : 1개 허용 value : 여러 개 허용
key : X
🧩 퀴즈 4
Q. Set을 정렬된 형태로 저장하고 싶다면 어떤 클래스를 사용해야 하나요?
📝 나의 답변:
TreeSet, LinkedHashSet
🧩 퀴즈 5
Q. Map에서 키의 중복을 허용하지 않는 이유는 무엇이라고 생각하나요?
📝 나의 답변:
Map에선 key-value 쌍으로 데이터를 저장하는데,
같은 key가 존재하면 기존 value를 다시 덮어쓰기 때문인 것 같다.
✅ 피드백:
1. 식별성 문제(고유성 문제)
- key를 기반으로 탐색을 진행하는데, 중복된 key가 존재하면 어떤 것을 식별해야할 지 문제가 생김
2. 검색 성능상의 문제(빠른 검색 철학 문제)
- key-value(단일값)이 mapping되어 있음을 전제로 검색하는데, key가 단일값이 아닐 경우
검색을 추가적으로 진행해야 함
- 시간 복잡성이 O(1) 또는 O(log n)이 아닌 O(n)으로 증가함
3. API 단순화 및 예측 가능성